﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar.Controls;
using Business;
using Entities;
using DevComponents.DotNetBar;
namespace Presentation
{
    public partial class frmLapPhieuNhapSach : DevComponents.DotNetBar.Office2007Form
    {
        public frmLapPhieuNhapSach()
        {
            InitializeComponent();

        }

        private void frmLapPhieuNhapSach_Load(object sender, EventArgs e)
        {
           TaoPhieuNhap();
        }

        private void dgvPhieuNhap_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            //DataGridViewCell cell = dgvPhieuNhap[e.ColumnIndex, e.RowIndex];
            //int maSach;
            //if(dgvPhieuNhap.Columns[e.ColumnIndex].Name=="MaSach" && int.TryParse(cell.Value.ToString(),out maSach))
            //{
            //    DataGridViewRow r = dgvPhieuNhap.Rows[e.RowIndex];                

            //    SachDTO s = SachService.GetSachByMaSach(maSach);
            //    if (s==null)
            //    {
            //        cell.ErrorText = "Không có mã sách này";                  
            //        return;
            //    }

            //    cell.ErrorText = ""; 
            //    r.Cells["TenSach"].Value = s.TenSach;
            //    r.Cells["TheLoai"].Value = TheLoaiService.GetTheLoaiByMaLoai(s.MaLoai).TenTheLoai;
            //}
        }

        private void dgvPhieuNhap_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {


        }

        private void dgvPhieuNhap_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewCell cell = dgvPhieuNhap[e.ColumnIndex, e.RowIndex];
            if ((dgvPhieuNhap.Columns[cell.ColumnIndex].Name == "MaSach" || dgvPhieuNhap.Columns[cell.ColumnIndex].Name == "SoLuong") && !KiemTraSoNguyen(cell))
            {
                cell.ErrorText = "Phải nhập số";
                return;
            }
            cell.ErrorText = "";
            if (dgvPhieuNhap.Columns[cell.ColumnIndex].Name == "MaSach")
            {
                SachDTO s = SachService.GetSachByMaSach(int.Parse(cell.Value.ToString()));
                if (s != null)
                {
                    TheLoaiDTO ls = TheLoaiService.GetTheLoaiByMaLoai(s.MaLoai);
                    dgvPhieuNhap.Rows[e.RowIndex].Cells["TenSach"].Value = s.TenSach;
                    dgvPhieuNhap.Rows[e.RowIndex].Cells["TheLoai"].Value = ls.TenTheLoai;
                    cell.ErrorText = "";
                }
                else
                {
                    cell.ErrorText = "Không tồn tại mã sách này!";
                }
            }
        }



        private void dtiNgayLap_Click(object sender, EventArgs e)
        {

        }

        private void dgvPhieuNhap_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
            e.Row.Cells[0].Value = (e.Row.Index + 1).ToString();
        }
        private bool KiemTraSoNguyen(DataGridViewCell cell)
        {
            int maSach;

            if (cell.Value == null || !int.TryParse(cell.Value.ToString(), out maSach))
            {
                return false;
            }
            return true;
        }

        private void dgvPhieuNhap_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
        {
            int STT = int.Parse(e.Row.Cells[0].Value.ToString());
            for (int i = STT - 1; i < dgvPhieuNhap.Rows.Count; i++)
            {
                dgvPhieuNhap.Rows[i].Cells["STT"].Value = (1 + i).ToString();
            }
        }

        private void btnLapPhieu_Click(object sender, EventArgs e)
        {
            int error = 0;
            //QuiDinhDTO qd = QuiDinhService.GetQuiDinhByMaQuiDinh(1);

            if (dgvPhieuNhap.Rows.Count==1)
            {
                MessageBoxEx.Show("Không thể lập phiếu!","Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int i = 0; i < dgvPhieuNhap.Rows.Count - 1; i++)
            {
                if (!KiemTraSoNguyen(dgvPhieuNhap["MaSach", i]))
                {
                    dgvPhieuNhap.Rows[i].ErrorText = "Lỗi nhập mã sách!";
                    dgvPhieuNhap["MaSach", i].ErrorText = "Không tồn tại mã sách này!";
                    MessageBox.Show(dgvPhieuNhap.Rows[i].ErrorText);
                    return;
                }
                if (!KiemTraSoNguyen(dgvPhieuNhap["SoLuong", i]))
                {
                    dgvPhieuNhap.Rows[i].ErrorText = "Lỗi số lượng";
                    dgvPhieuNhap["SoLuong", i].ErrorText = "Phải nhập số nguyên!";
                    MessageBox.Show(dgvPhieuNhap.Rows[i].ErrorText);
                    return;
                }
                else
                {
                    ThamSoDTO NhapToiThieu = ThamSoService.GetThamSoByTenThamSo("LuongToiThieuChoNhap");
                    ThamSoDTO TonToiDa = ThamSoService.GetThamSoByTenThamSo("TonToiDaChoNhap");
                    int soluong = int.Parse(dgvPhieuNhap["SoLuong", i].Value.ToString());
                    if (soluong < NhapToiThieu.GiaTri)
                    {
                        dgvPhieuNhap.Rows[i].ErrorText = "Số lượng nhập quá ít!";
                        dgvPhieuNhap["SoLuong", i].ErrorText = "Số lượng nhập phải lớn hơn" + NhapToiThieu.GiaTri.ToString();
                        MessageBox.Show(dgvPhieuNhap.Rows[i].ErrorText);
                        return;
                    }
                    if (SachService.GetSoLuongByMaSach(int.Parse(dgvPhieuNhap["MaSach", i].Value.ToString())) > TonToiDa.GiaTri)
                    {
                        dgvPhieuNhap.Rows[i].ErrorText = "Không thể nhập sách này vì số lượng tồn lớn hơn " + TonToiDa.GiaTri.ToString();

                        MessageBox.Show(dgvPhieuNhap.Rows[i].ErrorText);
                        return;
                    }
                }

                //Xóa các error
                dgvPhieuNhap.Rows[i].ErrorText = "";
                dgvPhieuNhap["SoLuong", i].ErrorText = "";

            }

            //Tạo danh sách các ChiTietPhieuNhapDTO
            List<ChiTietPhieuNhapDTO> listChiTietPhieuNhap = new List<ChiTietPhieuNhapDTO>();
            for (int i = 0; i < dgvPhieuNhap.Rows.Count - 1; i++)
            {
                ChiTietPhieuNhapDTO ct = new ChiTietPhieuNhapDTO();
                ct.MaPhieuNhap = int.Parse(this.txtMaPhieuNhap.Text);
                ct.MaSach = int.Parse(dgvPhieuNhap["MaSach", i].Value.ToString());
                ct.SoLuong = int.Parse(dgvPhieuNhap["SoLuong", i].Value.ToString());
            }
            
            PhieuNhapService.InsertPhieuNhap(listChiTietPhieuNhap, dtiNgayLap.Value);
            dgvPhieuNhap.ReadOnly = true;
            
            MessageBox.Show("ok");

        }
        private void TaoPhieuNhap()
        {
             //Phát sinh mã phiếu nhập
            this.txtMaPhieuNhap.Text = (PhieuNhapService.GetLastMaPhieuNhap() + 1).ToString();
            //Hiển thị ngày hiện hành
            dtiNgayLap.Value = DateTime.Today;
            //Hiển thị STT của dòng đầu tiên trong gridview là 1
            dgvPhieuNhap.Rows.Clear();
            dgvPhieuNhap.Rows[0].Cells["STT"].Value = "1";
        }

        private void btnTaoPhieuMoi_Click(object sender, EventArgs e)
        {
            TaoPhieuNhap();
        }
    }
}